package modulo1.cgt;

import java.util.List;
import modulo1.cdp.*;
import modulo1.cgd.AlunoDaoJpa;
import modulo1.cgd.CursoDaoJpa;
import modulo1.cgd.DisciplinaDaoJpa;
import modulo1.cgd.ProfessorDaoJpa;

public class CadastroInternoApl {

    static CadastroInternoApl instance;

    public static CadastroInternoApl getInstance() {
        if (instance == null) {
            instance = new CadastroInternoApl();
        }
        return instance;
    }

    /*
     *
     * CADASTRO DE CURSO
     *
     */
    public void cursoSalvar(Curso c) throws Exception {
        //TODO validarIncluirCurso
        //TODO validarAlterarCurso
        try {
            CursoDaoJpa cdj = new CursoDaoJpa();
            cdj.salvar(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao salvar curso.");
        }
    }

    public void cursoExcluir(Long id) throws Exception {
        //TODO validarExcluirCurso
        try {
            CursoDaoJpa cdj = new CursoDaoJpa();
            Curso c = new Curso();
            c.setId(id);
            c = cdj.consultar(c);
            cdj.excluir(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao excluir curso.");
        }
    }

    public Curso cursoConsultar(Long id) throws Exception {
        try {
            CursoDaoJpa cdj = new CursoDaoJpa();
            Curso c = new Curso();
            c.setId(id);
            c = cdj.consultar(c);
            return c;
        } catch (Exception ex) {
            throw new Exception("Erro ao consultar curso.");
        }
    }

    public List<Curso> cursoBuscar() throws Exception {
        try {
            CursoDaoJpa cdj = new CursoDaoJpa();
            return cdj.buscar(new Curso());
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar curso.");
        }
    }

    public List<Curso> cursoBuscarNome(String nome) throws Exception {
        try {
            CursoDaoJpa cdj = new CursoDaoJpa();
            return cdj.buscarNome(nome);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar curso.");
        }
    }

    /*
     *
     *
     * CADASTYRO DISCIPLINA
     *
     */
    public void disciplinaSalvar(Disciplina d) throws Exception {
        //TODO validarIncluirDisciplina
        //TODO validarAlterarDisciplina
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            ddj.salvar(d);
        } catch (Exception ex) {
            throw new Exception("Erro ao salvar a disciplina.");
        }
    }

    public void disciplinaExcluir(Long id) throws Exception {
        //TODO validarExcluirCurso
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            Disciplina d = new Disciplina();
            d.setId(id);
            d = ddj.consultar(d);
            ddj.excluir(d);
        } catch (Exception ex) {
            throw new Exception("Erro ao excluir disciplina.");
        }
    }

    public Disciplina disciplinaConsultar(Long id) throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            Disciplina d = new Disciplina();
            d.setId(id);
            d = ddj.consultar(d);
            return d;
        } catch (Exception ex) {
            throw new Exception("Erro ao consultar disciplina.");
        }
    }

    public List<Disciplina> disciplinaBuscar() throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            return ddj.buscar(new Disciplina());
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar disciplina.");
        }
    }

    public List<Disciplina> disciplinaBuscarNome(String nome) throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            return ddj.buscarNome(nome);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar disciplina por nome.");
        }
    }

    public List<Disciplina> disciplinaBuscarPeriodo(int periodo) throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            return ddj.buscarPeriodo(periodo);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar disciplina por periodo.");
        }
    }

    public List<Disciplina> disciplinaBuscarPeriodoCurso(int periodo, Curso curso) throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            return ddj.buscarPeriodoCurso(periodo, curso);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar disciplina por periodo.");
        }
    }

    public List<Disciplina> disciplinaBuscarCurso(Curso curso) throws Exception {
        try {
            DisciplinaDaoJpa ddj = new DisciplinaDaoJpa();
            return ddj.buscarCurso(curso);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar disciplina por curso.");
        }
    }

    /*
     *
     * CADASTRO DE ALUNO
     *
     */
    public void alunoSalvar(Aluno c) throws Exception {
        //TODO validarIncluirAluno
        //TODO validarAlterarAluno
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            cdj.salvar(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao salvar aluno.");
        }
    }

    public void alunoExcluir(Long id) throws Exception {
        //TODO validarExcluirAluno
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            Aluno c = new Aluno();
            c.setId(id);
            c = cdj.consultar(c);
            cdj.excluir(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao excluir aluno.");
        }
    }

    public Aluno alunoConsultar(Long id) throws Exception {
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            Aluno c = new Aluno();
            c.setId(id);
            c = cdj.consultar(c);
            return c;
        } catch (Exception ex) {
            throw new Exception("Erro ao consultar aluno.");
        }
    }

    public List<Aluno> alunoBuscarTurmaAptos(Turma turma) throws Exception {
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            return cdj.buscarAptosTurma(turma);
        } catch (Exception ex) {
            ex.printStackTrace();            
            throw new Exception("Erro ao buscar aluno.");
        }
    }
    
        public List<Aluno> alunoBuscarTurmaMatriculado(Turma turma) throws Exception {
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            return cdj.buscarMatriculadoTurma(turma);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar aluno.");
        }
    }

    public List<Aluno> alunoBuscar() throws Exception {
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            return cdj.buscar(new Aluno());
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar aluno.");
        }
    }

    public List<Aluno> alunoBuscarNome(String nome) throws Exception {
        try {
            AlunoDaoJpa cdj = new AlunoDaoJpa();
            return cdj.buscarNome(nome);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar aluno.");
        }
    }

    /*
     *
     * CADASTRO DE PROFESSOR
     *
     */
    public void professorSalvar(Professor c) throws Exception {
        //TODO validarIncluirProfessor
        //TODO validarAlterarProfessor
        try {
            ProfessorDaoJpa cdj = new ProfessorDaoJpa();
            cdj.salvar(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao salvar professor.");
        }
    }

    public void professorExcluir(Long id) throws Exception {
        //TODO validarExcluirProfessor
        try {
            ProfessorDaoJpa cdj = new ProfessorDaoJpa();
            Professor c = new Professor();
            c.setId(id);
            c = cdj.consultar(c);
            cdj.excluir(c);
        } catch (Exception ex) {
            throw new Exception("Erro ao excluir professor.");
        }
    }

    public Professor professorConsultar(Long id) throws Exception {
        try {
            ProfessorDaoJpa cdj = new ProfessorDaoJpa();
            Professor c = new Professor();
            c.setId(id);
            c = cdj.consultar(c);
            return c;
        } catch (Exception ex) {
            throw new Exception("Erro ao consultar professor.");
        }
    }

    public List<Professor> professorBuscar() throws Exception {
        try {
            ProfessorDaoJpa cdj = new ProfessorDaoJpa();
            return cdj.buscar(new Professor());
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar professor.");
        }
    }

    public List<Professor> professorBuscarNome(String nome) throws Exception {
        try {
            ProfessorDaoJpa cdj = new ProfessorDaoJpa();
            return cdj.buscarNome(nome);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception("Erro ao buscar professor.");
        }
    }
}
